package edu.rjh.reflection.reflection_1;


import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class Test {
    public static void main(String[] args) throws
            ClassNotFoundException,
            NoSuchMethodException,
            InvocationTargetException,
            InstantiationException,
            IllegalAccessException {
        //1.获取字节码文件对象
        Class<?> clazz = Class.forName("edu.rjh.reflection.reflection_1.Student");

        //2.获取构造方法
        //获取所有public构造方法
//        Constructor<?>[] cons1 = clazz.getConstructors();
//        for (Constructor<?> constructor : cons1) {
//            System.out.println(constructor);
//        }

        //获取所有构造方法
//        Constructor<?>[] cons2 = clazz.getDeclaredConstructors();
//        for (Constructor<?> constructor : cons2) {
//            System.out.println(constructor);
//        }

        //获取指定的构造方法
//        Constructor<?> con1 = clazz.getConstructor();
//        System.out.println(con1);
//        Constructor<?> con3 = clazz.getConstructor(int.class);
//        System.out.println(con3);
//        Constructor<?> con4 = clazz.getDeclaredConstructor(String.class);
//        System.out.println(con4);
        Constructor<?> con5 = clazz.getDeclaredConstructor(String.class,int.class);
        System.out.println(con5);

        //获取构造方法的修饰符
        int modifiers = con5.getModifiers();
        System.out.println(modifiers);

        //获取构造方法的参数
//        Parameter[] parameters = con5.getParameters();
//        for (Parameter parameter : parameters) {
//            System.out.println(parameter);
//        }

        //临时修改构造方法的访问权限
        con5.setAccessible(true);
        //创建对象
        Student student = (Student) con5.newInstance("张三", 15);
        System.out.println(student);
    }
}
